#ifndef __RPLIDAR_H
#define __RPLIDAR_H
#include "main.h"
#include "stm32f1xx_hal.h"
#define LIDAR_LOOP_NUM 4
#define LIDAR_DEGREE 361
#define PI 3.141592
static float sinNum[91]={0.000000,0.017452,0.034899,0.052336,0.069756,0.087156,0.104528,0.121869,0.139173,0.156434,0.173648,0.190809,0.207912,
	0.224951,0.241922,0.258819,0.275637,0.292372,0.309017,0.325568,0.342020,0.358368,0.374607,0.390731,0.406737,0.422618,0.438371,
	0.453991,0.469472,0.484810,0.500000,0.515038,0.529919,0.544639,0.559193,0.573576,0.587785,0.601815,0.615661,0.629320,0.642788,
	0.656059,0.669131,0.681998,0.694658,0.707107,0.719340,0.731354,0.743145,0.754710,0.766044,0.777146,0.788011,0.798636,0.809017,
	0.819152,0.829038,0.838671,0.848048,0.857167,0.866025,0.874620,0.882948,0.891007,0.898794,0.906308,0.913545,0.920505,0.927184,
	0.933580,0.939693,0.945519,0.951057,0.956305,0.961262,0.965926,0.970296,0.974370,0.978148,0.981627,0.984808,0.987688,0.990268,
	0.992546,0.994522,0.996195,0.997564,0.998630,0.999391,0.999848,1.000000};
static float cosNum[91]={1.000000,0.999848,0.999391,0.998630,0.997564,0.996195,0.994522,0.992546,0.990268,0.987688,0.984808,0.981627,0.978148,
	0.974370,0.970296,0.965926,0.961262,0.956305,0.951057,0.945519,0.939693,0.933580,0.927184,0.920505,0.913545,0.906308,0.898794,0.891007,
	0.882948,0.874620,0.866025,0.857167,0.848048,0.838671,0.829038,0.819152,0.809017,0.798635,0.788011,0.777146,0.766044,0.754710,0.743145,
	0.731354,0.719340,0.707107,0.694658,0.681998,0.669131,0.656059,0.642788,0.629320,0.615661,0.601815,0.587785,0.573576,0.559193,0.544639,
	0.529919,0.515038,0.500000,0.484810,0.469472,0.453990,0.438371,0.422618,0.406737,0.390731,0.374607,0.358368,0.342020,0.325568,0.309017,
	0.292372,0.275637,0.258819,0.241922,0.224951,0.207912,0.190809,0.173648,0.156434,0.139173,0.121869,0.104528,0.087156,0.069757,0.052336,
	0.034899,0.017452,-0.000000};
typedef struct
{
	uint16_t obstacle[5][361];
	uint8_t numOfCollection;

}Lidar_Type;

void UART2_Printf(const char* format,...);
uint8_t RPLIDAR_ROTATION_START(void);
uint8_t RPLIDAR_SCAN_START(uint8_t uart_order,Lidar_Type *lidar);
uint8_t RPLIDAR_SCAN_Stop(uint8_t uart_order,Lidar_Type *lidar);
uint8_t RPLIDAR_RESTARTSCAN(uint8_t uart_order,Lidar_Type *lidar);
uint8_t collect_LIDARdata(uint8_t uart_order,Lidar_Type *lidar);
uint8_t Detect_Obstacles(Lidar_Type *lidar,int16_t Min_X,int16_t Max_X,int16_t Min_Y,int16_t Max_Y,uint16_t Detect_Angle);
int16_t Get_Distance(Lidar_Type *lidar,uint16_t angle);
uint8_t isReceiveOvertime(uint8_t uart_order);
void Start_Receive_lidardata(uint8_t uart_order);
void Get_ScanData(uint8_t uart_order);


#endif



